#-*-coding:utf-8-*-
import os
import hou
class File(object):
    def __init__(self):
        super(File,self).__init__()



    #***********# hou.hipFile
    def basename(self):
        '''

        :return: 返回当前hip文件的基本名称
        '''
        hou.hipFile.basename()
        # print('basename')

    def hipName(self):
        '''

        :return: 返回当前hip文件的全路径名称
        '''
        return hou.hipFile.name()

        # print('name')

    def hipPath(self):
        '''
        等同于hipName()
        :return: 返回当前hip文件的全路径名称
        '''
        return hou.hipFile.path()
        # print('path')

    def hipDirectoryPath(self):
        '''
        返回当前hip文件的文件夹路径
        :return:
        '''
        hipPath=self.hipPath()
        dirpath=os.path.split(hipPath)[0]
        return dirpath
        # print('hipDirectoryPath')

    def hasUnsavedChanges(self):
        '''
        检测该hip文件是否更新过
        :return:  bool
        '''
        return hou.hipFile.hasUnsavedChanges()
        # print('hasUnsavedChanges()')


    def open(self,hipPath):
        '''
        载入hip文件
        :param hipPath:  如果是当前路径下hip则不需要全路径，否则必须是全路径名称
        :return:
        '''
        hou.hipFile.load(hipPath)
        # print('load')

    def save(self,hipPath):
        '''
        保存hip文件
        :param hipPath: 需要绝对路径
        :return:
        '''
        hou.hipFile.save(hipPath)
        # print('hou.hipFile.save')

    def saveAsText(self,hipPath):
        '''
        houdini默认保存形式是二进制
        :param hipPath: 绝对路径名称
        :return:
        '''
        hou.hipFile.setSaveMode(hou.saveMode.Text)
        hou.hipFile.save(hipPath)
        # print('saveAsText')



    def newProject(self,projectPath,projectName):
        '''
        在指定路径下创建houdini项目工程
        :param projectPath: 需要绝对路径
        :return:
        '''
        project = os.path.join(projectPath, projectName)
        isExists = os.path.exists(project)
        if not isExists:
            os.makedirs(project)

        dirlist = ['geo', 'hda', 'sim', 'abc', 'tex', 'render', 'flip', 'scripts', 'comp', 'audio', 'video', 'desk']

        for d in dirlist:
            newdir = os.path.join(project, d)
            os.makedirs(newdir)


    def newProjectCustom(self,projectPath,projectName,folderList):
        '''
        在指定路径下创建自定义的houdini项目工程
        :param projectPath: 需要绝对路径
        :return:
        '''
        project = os.path.join(projectPath, projectName)
        isExists = os.path.exists(project)
        if not isExists:
            os.makedirs(project)

        for d in folderList:
            newdir = os.path.join(project, d)
            os.makedirs(newdir)


    def setProject(self,projectPath):
        '''
        设置新工程项目
        :param projectPath: 工程项目绝对路径
        :return:
        '''
        hou.putenv('JOB',projectPath)
        # print('setProject')

    def setHipName(self,hipFile):
        '''
        设置hip文件名称
        :param hipFile: 需要带绝对路径的名称
        :return:
        '''
        hou.hipFile.setName(hipFile)
        # print('hou.hipFile.setName')

    def saveAsBackup(self):
        '''
        保存备份
        :return:
        '''
        hou.hipFile.saveAsBackup()
        # print('saveAsBackup')

    def new(self):
        '''
        在当前houdini窗口中新开一个houdini
        :return:
        '''
        hou.hipFile.clear(suppress_save_prompt=False)
        # print('clear')

    def merge(self,hipName):
        '''
        合并hip文件
        :param hipName: 需要带绝对路径的名称
        :return:
        '''
        hou.hipFile.merge(hipName)
        # print('merge')

    def mergedSameNodes(self,hipName):
        '''
        如果使用merge方式合并hip文件，则返回重名的所有节点
        是递归方式检测
        :param hipName: 需要绝对路径名称的hip文件
        :return:
        '''
        hou.hipFile.collisionNodesIfMerged(hipName)
        # print('collisionNodesIfMerged')

    def isLoadingHipFile(self):
        '''
        检测当前houdini是否正在载入hip文件
        :return:
        '''
        return hou.hipFile.isLoadingHipFile()
        # print('isLoadingHipFile')

    def isShuttingDown(self):
        '''
        检测当前houdini是否崩溃了
        :return:
        '''
        return hou.hipFile.isShuttingDown()
        # print('isShuttingDown()')

    def saveMode(self):
        '''
        返回当前hip文件保存类型
        :return: 返回有2种，一种是hou.saveMode.Text 一种是hou.saveMode.Binary
        '''
        return hou.hipFile.saveMode()
        # print('saveMode')

    def setSaveMode(self,saveMode):
        '''
        设置hip文件的保存类型
        :param saveMode: 有2种，一种是hou.saveMode.Text 一种是hou.saveMode.Binary
        :return:
        '''
        hou.hipFile.setSaveMode(saveMode)
        # print('setSaveMode')

    def importFBX(self,fbxPath):
        '''
        导入FBX文件
        :param fbxPath: 需要带绝对路径名称的FBX文件
        :return:
        '''
        hou.hipFile.importFBX(fbxPath)
        # print('importFBX')




    #***************# hou  function

    def findFile(self,hipName):
        '''
        查找指定名称的hip文件
        :param hipName: 如果查找的是当前文件同级目录的文件，则只需要输入文件名称，否则需要带绝对路径名称
        :return: hip文件的绝对路径名称
        '''
        return hou.findFile(hipName)
        # print ('findFile')

